package com.ddm.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.ddm.entity.vxEntity.User;
import com.ddm.mapper.WebAdminMapper;
import com.ddm.service.webService.WebAdminService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Slf4j
@Service
public class WebAdminServiceImpl implements WebAdminService {

    @Autowired
    private WebAdminMapper webAdminMapper;

    @Override
    public List<User> findAdminsByName(String name) {
        log.info("根据用户名查询管理员: {}", name);
        return webAdminMapper.findAdminsByName(name);
    }

    @Override
    public List<User> findAllAdmins() {
        log.info("查询所有管理员用户");
        return webAdminMapper.findAllAdmins();
    }

    @Override
    public User findAdminById(Long id) {
        log.info("根据ID查询管理员: {}", id);
        return webAdminMapper.findAdminById(id);
    }

    @Override
    public boolean updateUserDelete(Long id) {
        // 1. 手动构建查询条件：只按 ID 查，不自动过滤 deleted（关键修改）
        User user = webAdminMapper.selectUserById(id);
        if (user == null) {
            log.warn("用户不存在，ID: {}", id);
            return false; // 用户不存在，返回失败
        }
        Integer originalDeleted = user.getDeleted();
        // 2. 构建更新条件：反转 deleted 字段（1→0，0→1）
        Integer newDeleted = originalDeleted == 1 ? 0 : 1; // 反转状态
        // 3. 执行更新（兼容影响行数为负数的异常情况）
        int affectedRows = webAdminMapper.updateUserDeletedById(id, newDeleted);
        // 4. 重新查询数据库，验证更新是否成功（替代「影响行数>0」的判断）
        User updatedUser = webAdminMapper.selectUserById(id);
        // 验证条件：更新后的 deleted 状态 ≠ 更新前的状态
        boolean isSuccess = updatedUser != null
                && !updatedUser.getDeleted().equals(user.getDeleted());
        if (isSuccess) {
            log.info("用户删除状态反转成功，ID: {}，原状态: {}，新状态: {}",
                    id, user.getDeleted(), updatedUser.getDeleted());
        } else {
            log.error("用户删除状态反转失败，ID: {}，影响行数: {}", id, affectedRows);
        }
        return isSuccess;
    }
}